/*
 * 软件版权: 恒生电子股份有限公司
 * 修改记录:
 * 修改日期     修改人员  修改说明
 * ========    =======  ============================================
 * 2021/3/19  lisy31662  新增
 * ========    =======  ============================================
 */
package com.sansi.pencilbook.util;

/**
 * 功能说明: ISBN工具类
 *
 * @author lisy31662
 */
public class ISBNUtil {

  public static boolean checkISBN(String ISBN) throws Exception{
    if ((ISBN = ISBN.trim()).contains("-")) {
      ISBN = ISBN.replace("-", "");
    }
    if (ISBN.length() == 10) {
      return checkTenISBN(ISBN);
    }else if (ISBN.length() == 13) {
      return checkthirteenISBN(ISBN);
    }else {
      return false;
    }
  }

  /**
   * 十位ISBN的校验
   * @param ISBN 传入的十位ISBN
   * @return  正确返回true; 错误返回false
   */
  private static boolean checkTenISBN(String ISBN) throws Exception{
    if (ISBN.contains("-")) {
      ISBN = ISBN.replace("-", "");
    }
    String[] isbn = ISBN.split("");
    //加权和
    int sum = 0;
    for (int i=0;i<9;i++) {
      sum += Integer.parseInt(isbn[i]) * (10-i);
    }
    //校验码
    int code = 11 - (sum % 11);
    String checkCode = "";
    switch (code) {
      case 10 : checkCode = "X"; break;
      case 1 : checkCode = "0";break;
      default: checkCode = String.valueOf(code);break;
    }
    return checkCode.equals(isbn[9]);
  }

  /**
   * 十三位ISBN的校验
   * @param ISBN 传入的十三位ISBN
   * @return  正确返回true; 错误返回false
   */
  private static boolean checkthirteenISBN(String ISBN) throws Exception{
    if (ISBN.contains("-")) {
      ISBN = ISBN.replace("-", "");
    }
    String[] isbn = ISBN.split("");
    //加权和
    int sum = 0;
    for (int i=0;i<12;i++) {
      if ((i+1)%2 == 0) {
        sum += 3 * Integer.parseInt(isbn[i]);
      }else {
        sum += Integer.parseInt(isbn[i]);
      }
    }
    int code = 10 - (sum % 10);
    String checkCode = "";
    if (code == 10) {
      checkCode = "0";
    } else {
      checkCode = String.valueOf(code);
    }
    return checkCode.equals(isbn[12]);
  }

}
